home *** CD-ROM | disk | FTP | other *** search
/ Cream of the Crop 1 / Cream of the Crop 1.iso / PROGRAM / CWL2A_3.ARJ / MENU.H < prev    next >
C/C++ Source or Header  |  1991-11-13  |  15KB  |  392 lines

  1. /*** MENU.H ***/
  2.  
  3. /* Written By P.A. McKenzie
  4.  * The C Window Library
  5.  * Copyright (C) 1990   All Rights Reserved
  6. */
  7. #if !defined (MENU_DEF)
  8. #define MENU_DEF  1
  9. #include "window.h"
  10. #include "bstring.h"
  11. #undef PROTO_DEF
  12. #include "proto.h"
  13.  
  14. #ifndef UNKNOWNARGS
  15. #ifndef __cplusplus
  16. #define UNKNOWNARGS
  17. #else
  18. #define UNKNOWNARGS ...
  19. #endif
  20. #endif
  21.  
  22. #if defined (MENU_GLOBAL_DEF)
  23. #define MENU_EXTERN
  24. #else
  25. #define MENU_EXTERN  extern
  26. #endif
  27.  
  28. /* define offsets for pop-up menu keys */
  29.  
  30. #define POPUP_UPKEY              0
  31. #define POPUP_DOWNKEY            1
  32. #define POPUP_ACCEPTKEY          2
  33. #define POPUP_QUITKEY            3
  34. #define POPUP_HOMEKEY            4
  35. #define POPUP_ENDKEY             5
  36. #define POPUP_RIGHTKEY           6
  37. #define POPUP_LEFTKEY            7
  38. #define POPUP_PULLDOWN_QUITKEY   8
  39. #define POPUP_PAGEUPKEY          9
  40. #define POPUP_PAGEDOWNKEY       10
  41.  
  42. #define NUMPOPUPKEYS     11
  43.  
  44. #define PULLDOWN_EXIT       3
  45. #define PULLDOWN_CONTINUE   5
  46.  
  47. /* define offsets for bar menu keys */
  48. #define BAR_RIGHTKEY           0
  49. #define BAR_LEFTKEY            1
  50. #define BAR_ACCEPTKEY          2
  51. #define BAR_QUITKEY            3
  52. #define BAR_HOMEKEY            4
  53. #define BAR_ENDKEY             5
  54.  
  55. #define NUMBARKEYS     6
  56.  
  57. #define NO_BAR_OPTIONS 0
  58. #define BARWRAP        1
  59. #define BARSTATIC      2
  60. #define BARCONFIRM     4
  61. #define BARDISPLAY     8
  62. #define BAROVERRIDE    16
  63. #define BARENHANCEDKEY 32
  64. #define BARMOUSE       64
  65.  
  66. #define NO_POPUP_OPTIONS 0
  67. #define POPUPWRAP        1
  68. #define POPUPSTATIC      2
  69. #define POPUPCONFIRM     4
  70. #define POPUPDISPLAY     8
  71. #define POPUPOVERRIDE    16
  72. #define POPUPENHANCEDKEY 32
  73. #define POPUPMOUSE       64
  74. #define POPUPMOUSESCROLL 128
  75.  
  76. /**********  Popup return values for user-defined functions **********/
  77.  
  78. #define KEEP_GETTING_INPUT         0
  79. #define MOVE_CONTINUE_DONE        -1
  80. #define POPUP_CONTINUE            -2
  81. #define POPUP_MOVE_UP             -3
  82. #define POPUP_MOVE_DOWN           -4
  83. #define POPUP_DO_CHOICE           -5
  84. #define POPUP_MOVE_CONTINUE       -6
  85. #define POPUP_ESCAPE              -7
  86. #define POPUP_MOVE_LEFT           -8
  87. #define POPUP_MOVE_RIGHT          -9
  88. #define POPUP_MOVE_HOME           -10
  89. #define POPUP_MOVE_END            -11
  90. #define POPUP_PULLDOWN_QUIT       -12
  91. #define POPUP_MOVE_BAR_CHOICE     -13
  92. #define POPUP_MOVE_PAGEDOWN       -14
  93. #define POPUP_MOVE_PAGEUP         -15
  94.  
  95.  
  96. /* The following macros are used for compatibility with versions prior to
  97.  * Version 1.5 */
  98. #define PULLDOWN_POPUP_EXIT   POPUP_PULLDOWN_QUIT
  99. #define POPUP_PULLDOWN_EXIT   POPUP_PULLDOWN_QUIT
  100. #define PULLDOWN_POPUP_QUIT   POPUP_PULLDOWN_QUIT
  101. #define POPUP_EXIT            POPUP_ESCAPE
  102. #define BAR_EXIT              BAR_ESCAPE
  103.  
  104. /**********  Bar return values for user-defined functions **********/
  105.  
  106. #define BAR_CONTINUE         -14
  107. #define BAR_MOVE_RIGHT       -15
  108. #define BAR_MOVE_LEFT        -16
  109. #define BAR_DO_CHOICE        -17
  110. #define BAR_MOVE_CONTINUE    -18
  111. #define BAR_ESCAPE           -19
  112. #define BAR_MOVE_HOME        -20
  113. #define BAR_MOVE_END         -21
  114.  
  115.  
  116. #define ENTRYCOLOR       0
  117. #define BORDERCOLOR      1
  118. #define HOTKEYCOLOR      2
  119. #define HIGHLIGHTCOLOR   3
  120. #define UNAVAILCOLOR     4
  121.  
  122. #define NUMPOPUPCOLORS 5
  123. #define NUMBARCOLORS   5
  124.  
  125. #define MENU_PRESS     0
  126. #define MENU_RELEASE   1
  127. #define NUMMOUSEINFO   8
  128.  
  129. typedef struct
  130. {
  131.   unsigned int wrap_around:1;   /* menu highlight bar wrap */
  132.   unsigned int static_menu:1;   /* menu is displayed while performing
  133.                                  * function */
  134.   unsigned int confirm_flag:1;  /* confirmation function when hotkey is
  135.                                  * pressed */
  136.   unsigned int open_flag:1;     /* menu is activated ? */
  137.   unsigned int pulldown_flag:1; /* menu is part of pulldown system? */
  138.   unsigned int display_flag:1;  /* menu is displayed even after exiting? */
  139.   unsigned int override:1;      /* unavailable entries are still processed? */
  140.   unsigned int enhanced_key:1;  /* enhanced key flag */
  141.   unsigned int mouse_flag:1;    /* tells if using mouse */
  142.  
  143. } POPUP_MENU_STATUS, BAR_MENU_STATUS;
  144.  
  145.  
  146. typedef struct
  147. {
  148.   char *entry_name;
  149.   unsigned row;
  150.   unsigned char hotkey_letter;
  151.   unsigned int ext_hotkey;
  152.   int (*func)(UNKNOWNARGS);
  153. } POPUP_MENU_ENTRY, *POPUP_MENU_ENTRY_PTR;
  154.  
  155.  
  156. typedef struct popmenu
  157. {
  158.   WPOINTER w;
  159.   POPUP_MENU_ENTRY *menu_select;
  160.   unsigned menu_color[NUMPOPUPCOLORS];
  161.   unsigned menu_key[NUMPOPUPKEYS];
  162.   POPUP_MENU_STATUS popmenu_flags;
  163.   BITSTRING active_entry;
  164.   int pwidth;
  165.   unsigned last_entry;
  166.   int exp_method;
  167.   char *pulldown;
  168.   int (*confirm_func)(struct popmenu *, unsigned);
  169.   unsigned int mouse_scroll:1;
  170.   unsigned char popup_mouse_status[NUMMOUSEINFO];
  171. } POPUP_MENU, *POPUP_MENU_PTR;
  172.  
  173.  
  174.  
  175. #define POPUP_WRAP_ON(p)              (p)->popmenu_flags.wrap_around
  176. #define POPUP_STATIC_ON(p)            (p)->popmenu_flags.static_menu
  177. #define POPUP_EXPLODE(p)              (p)->popmenu_flags.explode_flag
  178. #define POPUP_CONFIRM_ON(p)           (p)->popmenu_flags.confirm_flag
  179. #define POPUP_OPEN(p)                 (p)->popmenu_flags.open_flag
  180. #define POPUP_PULLDOWN_ON(p)          (p)->popmenu_flags.pulldown_flag
  181. #define POPUP_DISPLAY_ON(p)           (p)->popmenu_flags.display_flag
  182. #define POPUP_OVERRIDE_ON(p)          (p)->popmenu_flags.override
  183. #define POPUP_ENHANCED_ON(p)          (p)->popmenu_flags.enhanced_key
  184. #define POPUP_MOUSE_ON(p)             (p)->popmenu_flags.mouse_flag
  185. #define POPUP_MOUSE_SCROLL_ON(p)      (p)->mouse_scroll
  186.  
  187. #define S_UP_CHAR   0
  188. #define S_DN_CHAR   1
  189. #define S_UP_ATTR   2
  190. #define S_DN_ATTR   3
  191. #define S_UP_ROW    4
  192. #define S_UP_COL    5
  193. #define S_DN_ROW    6
  194. #define S_DN_COL    7
  195.  
  196.  
  197. #define POPUP_SCROLL_UP_CHAR(p)       (p)->popup_mouse_status[S_UP_CHAR]
  198. #define POPUP_SCROLL_DOWN_CHAR(p)     (p)->popup_mouse_status[S_DN_CHAR]
  199. #define POPUP_SCROLL_UP_ATTR(p)       (p)->popup_mouse_status[S_UP_ATTR]
  200. #define POPUP_SCROLL_DOWN_ATTR(p)     (p)->popup_mouse_status[S_DN_ATTR]
  201. #define POPUP_SCROLL_UP_ROW(p)        (p)->popup_mouse_status[S_UP_ROW]
  202. #define POPUP_SCROLL_UP_COLUMN(p)     (p)->popup_mouse_status[S_UP_COL]
  203. #define POPUP_SCROLL_DOWN_ROW(p)      (p)->popup_mouse_status[S_DN_ROW]
  204. #define POPUP_SCROLL_DOWN_COLUMN(p)   (p)->popup_mouse_status[S_DN_COL]
  205.  
  206. void menu_init();
  207.  
  208. typedef struct
  209. {
  210.   char *entry_name;
  211.   int row;
  212.   int col;
  213.   unsigned char hotkey_letter;
  214.   unsigned int ext_hotkey;
  215.   int (*func)(UNKNOWNARGS);
  216. } BAR_MENU_ENTRY, *BAR_MENU_ENTRY_PTR;
  217.  
  218.  
  219.  
  220. typedef struct barmenu
  221. {
  222.   WPOINTER w;
  223.   BAR_MENU_ENTRY *menu_select;
  224.   unsigned menu_color[NUMBARCOLORS];
  225.   unsigned menu_key[NUMBARKEYS];
  226.   BAR_MENU_STATUS barmenu_flags;
  227.   BITSTRING active_entry;
  228.   int *width;
  229.   int exp_method;
  230.   unsigned last_entry;
  231.   int (*confirm_func)(struct barmenu *, unsigned);
  232.   char *pulldown;
  233. } BAR_MENU, *BAR_MENU_PTR;
  234.  
  235.  
  236.  
  237.  
  238.  
  239. #define BAR_WRAP_ON(b)              (b)->barmenu_flags.wrap_around
  240. #define BAR_STATIC_ON(b)            (b)->barmenu_flags.static_menu
  241. #define BAR_EXPLODE(b)              (b)->barmenu_flags.explode_flag
  242. #define BAR_CONFIRM_ON(b)           (b)->barmenu_flags.confirm_flag
  243. #define BAR_OPEN(b)                 (b)->barmenu_flags.open_flag
  244. #define BAR_DISPLAY_ON(b)           (b)->barmenu_flags.display_flag
  245. #define BAR_OVERRIDE_ON(b)          (b)->barmenu_flags.override
  246. #define BAR_PULLDOWN_ON(b)          (b)->barmenu_flags.pulldown_flag
  247. #define BAR_ENHANCED_ON(b)          (b)->barmenu_flags.enhanced_key
  248. #define BAR_MOUSE_ON(b)             (b)->barmenu_flags.mouse_flag
  249.  
  250.  
  251. typedef struct pullmenu
  252. {
  253.   BAR_MENU_PTR barmenu;
  254.   POPUP_MENU_PTR *popupmenu;
  255. }  PULLDOWN_MENU, *PULLDOWN_MENU_PTR;
  256.  
  257. PULLDOWN_MENU_PTR  CreatePulldownMenu();
  258. /* Up to here */
  259.  
  260. MENU_EXTERN int (*popup_undef_key) P((POPUP_MENU_PTR p, unsigned key,
  261.                                      unsigned *entry));
  262. MENU_EXTERN int (*bar_undef_key) P((BAR_MENU_PTR b, unsigned key,
  263.                                     unsigned *entry));
  264. MENU_EXTERN int (*global_bar_prefunc) P((BAR_MENU_PTR b, unsigned *selectptr));
  265. MENU_EXTERN int (*global_popup_prefunc) P((POPUP_MENU_PTR p, unsigned *selectptr));
  266. MENU_EXTERN void (*popup_mouse_move_func) P((POPUP_MENU_PTR p, unsigned sel));
  267.  
  268. MENU_EXTERN unsigned popup_key_definition[NUMPOPUPKEYS];
  269. MENU_EXTERN unsigned bar_key_definition[NUMBARKEYS];
  270. MENU_EXTERN unsigned current_popup_height;
  271. MENU_EXTERN unsigned current_popup_width;
  272. MENU_EXTERN unsigned current_bar_width;
  273. MENU_EXTERN unsigned current_bar_height;
  274. MENU_EXTERN unsigned popmenu_mouse_delay;
  275.  
  276. #if __cplusplus
  277.    extern "C"
  278.       {
  279. #endif
  280.  
  281. BAR_MENU_ENTRY_PTR BarAllocate P((int numentry));
  282. int               BarAssignColors P((BAR_MENU_PTR barptr, unsigned *colors));
  283. int               BarAssignKeys P((BAR_MENU_PTR barptr, unsigned *keys));
  284. int               BarChangeEntryString P((BAR_MENU_PTR barptr, unsigned entry,
  285.                                           char *string));
  286. void              BarCreateEntry P((BAR_MENU_ENTRY *entry, int entrynum,
  287.                                     char *name, int row, int col, char hotkey,
  288.                                     unsigned int ext_hotkey,
  289.                                     int (*func)P((UNKNOWNARGS))));
  290.  
  291. BAR_MENU_PTR      BarCreateMenu P((BAR_MENU_ENTRY *entries, unsigned *colors,
  292.                                   int row, int col, unsigned options,
  293.                                   WPOINTER (*wfunc)(void)));
  294.  
  295. void              BarDeallocate P((BAR_MENU_ENTRY_PTR bentry));
  296. void              BarEntryEnd P((BAR_MENU_ENTRY_PTR entry, int numfields));
  297. int               BarMakeEntryAvailable P((BAR_MENU_PTR barptr, unsigned entry));
  298. int               BarMakeEntryUnavailable P((BAR_MENU_PTR barptr, unsigned entry));
  299. int               BarMenuFree P((BAR_MENU_PTR barptr));
  300. int               BarSetExplosionType P((BAR_MENU_PTR barptr, int effect));
  301. int               BarSetOptions P((BAR_MENU_PTR barptr, int options, int flag));
  302. int               BarSelectMenu P((BAR_MENU_PTR barptr, int rank,
  303.                                    unsigned entry));
  304. int               BarSetConfirmFunction P((BAR_MENU_PTR barptr,
  305.                                            int (*cfunc)(BAR_MENU_PTR, unsigned)));
  306.  
  307. POPUP_MENU_ENTRY_PTR   PopupAllocate P((int numentry));
  308. int               PopupAssignColors P((POPUP_MENU_PTR popptr, unsigned *colors));
  309. int               PopupAssignKeys P((POPUP_MENU_PTR popptr, unsigned *keys));
  310.  
  311. void              PopupCreateEntry P((POPUP_MENU_ENTRY_PTR entry, int entrynum,
  312.                                       char *name, unsigned row,
  313.                                       unsigned char hotkey,
  314.                                       unsigned int ext_hotkey,
  315.                                       int (*func)P((UNKNOWNARGS))));
  316. POPUP_MENU_PTR    PopupCreateMenu P((POPUP_MENU_ENTRY *entries, unsigned *colors,
  317.                                      unsigned row, unsigned col, int wheight,
  318.                                      unsigned options,
  319.                                      WPOINTER (*wfunc)(void),
  320.                                      VWPOINTER (*vwfunc)(void)));
  321.  
  322. void              PopupDeallocate P((POPUP_MENU_ENTRY_PTR pentry));
  323. void              PopupEntryEnd P((POPUP_MENU_ENTRY_PTR entry, int numfields));
  324. int               PopupMakeEntryAvailable P((POPUP_MENU_PTR popptr,
  325.                                              unsigned entry));
  326. int               PopupMakeEntryUnavailable P((POPUP_MENU_PTR popptr,
  327.                                              unsigned entry));
  328.  
  329. int               PopupSelectMenu P((POPUP_MENU_PTR popptr, int rank,
  330.                                      unsigned entry));
  331. int               PopupSetOptions P((POPUP_MENU_PTR popptr, unsigned options,
  332.                                      int flag));
  333.  
  334. int               PopupChangeEntryString P((POPUP_MENU_PTR popptr,
  335.                                             unsigned entry, char *string));
  336. int               PopupSetExplosionType P((POPUP_MENU_PTR popptr, int effect));
  337.  
  338. int               PopupSetConfirmFunction P((POPUP_MENU_PTR popptr,
  339.                              int (*cfunc)(POPUP_MENU_PTR, unsigned)));
  340. int               PopupMenuFree P((POPUP_MENU_PTR popptr));
  341.  
  342. PULLDOWN_MENU_PTR PulldownCreateMenu P((POPUP_MENU_PTR popptrs[],
  343.                                         BAR_MENU_PTR barptr, int adjust));
  344.  
  345. int               PulldownSelectMenu P((PULLDOWN_MENU_PTR pullptr, int rankbar,
  346.                                         unsigned startbar, int *rankpop,
  347.                                         unsigned *startpop,
  348.                                         int imode));
  349.  
  350. int               PulldownMenuFree    P((PULLDOWN_MENU_PTR pullptr));
  351. int               PulldownMenuFreeAll P((PULLDOWN_MENU_PTR pullptr));
  352.  
  353. #if defined (SOURCE)
  354. #include "mintern.h"
  355. #endif
  356. #if __cplusplus
  357.   }
  358. #endif
  359. /* Other defines */
  360. #define       BAR_NULL_PTR      ((BAR_MENU_PTR)0)
  361. #define       POPUP_NULL_PTR    ((POPUP_MENU_PTR)0)
  362. #define       PULLDOWN_NULL_PTR ((PULLDOWN_MENU_PTR)0)
  363. #define       BAR_ENTRY_NULL    ((BAR_MENU_ENTRY *)0)
  364. #define       POPUP_ENTRY_NULL  ((POPUP_MENU_ENTRY *)0)
  365. #define       POPUP_STRING_IN_WINDOW(p,e)  \
  366.      (((p)->w->vwrow+(p)->w->height-1) > ((p)->menu_select[(e)-1].row) ? 1:0)
  367. #define       POPUP_ENTRY_AVAILABLE(p,e) (test_bit(&(p)->active_entry,(e)-1))
  368. #define       POPUP_WINDOW(p)            ((p)->w)
  369. #define       POPUP_VIRTUAL_WINDOW(p)    ((p)->w->vwptr)
  370. #define       POPUP_ENTRY_STRING(p,e)    ((p)->menu_select[(e)-1].entry_name)
  371. #define       POPUP_NUMBER_OF_ENTRIES(p) ((p)->active_entry.nbits)
  372. #define       BAR_ENTRY_AVAILABLE(b,e)   (POPUP_ENTRY_AVAILABLE((b),(e)))
  373. #define       BAR_WINDOW(b)              ((b)->w)
  374. #define       BAR_ENTRY_STRING(b,e)      ((b)->menu_select[(e)-1].entry_name)
  375. #define       BAR_NUMBER_OF_ENTRIES(b)   ((b)->active_entry.nbits)
  376.  
  377. #define       PULLDOWN_MENU_PTR_FROM_BAR(b)  \
  378.                           ((PULLDOWN_MENU_PTR)((b)->pulldown))
  379. #define       PULLDOWN_MENU_PTR_FROM_POPUP(p) \
  380.                           ((PULLDOWN_MENU_PTR)((p)->pulldown))
  381.  
  382. #define       BAR_MENU_PTR_FROM_PULLDOWN(pull) ((pull)->barmenu)
  383. #define       POPUP_MENU_PTR_FROM_PULLDOWN(pull,entry) \
  384.                                          ((pull)->popupmenu[(entry)-1])
  385.  
  386. #define       BAR_MENU_PTR_FROM_POPUP(p) \
  387.               (BAR_MENU_PTR_FROM_PULLDOWN(PULLDOWN_MENU_PTR_FROM_POPUP(p)))
  388.  
  389. #define       POPUP_MENU_PTR_FROM_BAR(b,entry) \
  390.               (POPUP_MENU_PTR_FROM_PULLDOWN(PULLDOWN_MENU_PTR_FROM_BAR(b),entry))
  391. #endif
  392.